Software application performance monitoring and analysis allows application developers and system administrators to tune, optimize, and improve the performance of computing systems. Identifying particular phases of software applications is a useful technique for performance analysis. For example, after identifying software phases, applications may be grouped together to minimize resource conflicts between the applications. Software phases include any functional subunit of a software application such as a thread, object, function, module, or other component. Typical performance analysis tools may allow a human operator to identify software phases, for example by viewing graphs or tables of performance monitoring data. Other analysis tools may identify software phases by monitoring changes in the memory address of the instructions being executed (e.g., the value of a hardware program counter or instruction pointer). However, retrieving the instruction address may cause an unacceptable performance penalty. In addition, such a heavyweight performance monitoring approach may not be suitable for long-running applications such as server applications in a cloud environment